package com.github.cakin.shiro.chapter21.entity;

import java.io.Serializable;

/**
 * @className: Resource
 * @description: 资源实体
 * @date: 2020/5/25
 * @author: cakin
 */
public class Resource implements Serializable {
    /**
     * 编号
     */
    private Long id;
    /**
     * 资源名称
     */
    private String name;
    /**
     * 资源类型
     */
    private ResourceType type = ResourceType.menu;
    /**
     * 资源路径
     */
    private String url;
    /**
     * 权限字符串
     */
    private String permission;
    /**
     * 父编号
     */
    private Long parentId;
    /**
     * 父编号列表
     */
    private String parentIds;
    /**
     * 是否可用
     */
    private Boolean available = Boolean.FALSE;
    public  enum ResourceType {
        /**
         * 菜单和按钮的枚举类型
         */
        menu("菜单"), button("按钮");
        /**
         * 资源信息
         */
        private final String info;

         ResourceType( String info ) {
            this.info = info;
        }

        public String getInfo() {
            return info;
        }
    }


    public Long getId() {
        return id;
    }

    public void setId( Long id ) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName( String name ) {
        this.name = name;
    }

    public ResourceType getType() {
        return type;
    }

    public void setType( ResourceType type ) {
        this.type = type;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl( String url ) {
        this.url = url;
    }

    public String getPermission() {
        return permission;
    }

    public void setPermission( String permission ) {
        this.permission = permission;
    }

    public Long getParentId() {
        return parentId;
    }

    public void setParentId( Long parentId ) {
        this.parentId = parentId;
    }

    public String getParentIds() {
        return parentIds;
    }

    public void setParentIds( String parentIds ) {
        this.parentIds = parentIds;
    }

    public Boolean getAvailable() {
        return available;
    }

    public void setAvailable( Boolean available ) {
        this.available = available;
    }

    public boolean isRootNode() {
        return parentId == 0;
    }

    public String makeSelfAsParentIds() {
        return getParentIds() + getId() + "/";
    }

    @Override
    public boolean equals( Object o ) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        Resource resource = (Resource) o;

        if (id != null ? !id.equals(resource.id) : resource.id != null) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }

    @Override
    public String toString() {
        return "Resource{"
                + "id=" + id
                + ", name='" + name + '\''
                + ", type=" + type
                + ", permission='" + permission + '\''
                + ", parentId=" + parentId
                + ", parentIds='" + parentIds + '\''
                + ", available=" + available
                + '}';
    }
}
